#ifndef __ADC_DRIVER_H__
#define __ADC_DRIVER_H__

#include <stdbool.h>
#include <math.h>
#include "driver/adc.h"
#include "esp_adc_cal.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/semphr.h"

// 硬件配置
#define VOLTAGE_ADC_CHANNEL ADC1_CHANNEL_9  // GPIO10 (48V测量)
#define CURRENT_ADC_CHANNEL ADC1_CHANNEL_6  // GPIO7 (ACS712电流)
#define ADC_ATTEN           ADC_ATTEN_DB_11
#define ADC_WIDTH           ADC_WIDTH_BIT_12
#define SAMPLE_SIZE         5

// 48V电压测量参数
#define VOLTAGE_DIVIDER_RATIO 66.7f

// ACS712参数
#define ACS712_VCC            5.13f
#define ACS712_ZERO_POINT     (ACS712_VCC/2.0f)
#define ACS712_SENSITIVITY    0.033f
#define CURRENT_MAX_RANGE     30.0f

// 在硬件配置部分新增
#define POWER_ENABLE_GPIO     42  // 5V使能控制引脚
#define POWER_ENABLE_LEVEL    1   // 高电平使能

typedef struct {
    uint32_t raw_voltage;
    uint32_t raw_current;
    float bus_voltage;   // 48V总线电压
    float current;       // 电流值(A)
    bool current_valid;
} adc_measurement_t;

// 初始化函数
void adc_init(void);
void adc_power_ctrl(bool enable);  // 新增电源控制函数

// 任务控制
void adc_start_collection_task(void);
void adc_stop_collection_task(void);

// 数据获取
bool adc_get_measurement(adc_measurement_t *meas, TickType_t timeout);

// 校准接口
void adc_calibrate_current(float zero_point, float sensitivity);

#endif
